package com.proyecto.core.Utilidades;

import java.lang.reflect.Method;
import java.util.List;


public class UtilValidacion {


	/**
	 * @param obj 
	 * @param dao
	 * @param pojo
	 * @throws Exception
	 */
	public void verCambiaPorDefecto (Object obj, Object dao) {
		/*
		 * 
		 * VERIFICANDO VALOR POR DEFECTO
		 * 
		 * */

		Class  clase, 
		claseAux;

		/*TIPOS DE PARAMETROS DE setValorpordefecto*/
		Class partipos1[] = new Class[1];
		partipos1[0] =  String.class;

		/*TIPOS DE PARAMETROS DE findByProperty*/
		Class partipos2[] = new Class[2];
		partipos2[0] = String.class;
		partipos2[1] = Object.class;

		/*TIPOS DE PARAMETROS DE attachDirty*/
		Class partipos3[] = new Class[1];
		partipos3[0] = Object.class;

		/*PARAMETROS DE setValorpordefecto*/
		Object parametros1[] = new Object[1];		
		parametros1[0] = "N";

		/*PARAMETROS DE findByProperty*/
		Object parametros2[] = new Object[2];		
		parametros2[0] = "valorpordefecto";
		parametros2[1] = "S";


		Method getValorPorDefecto,		//DEL POJO
		setValorpordefecto,	//DEL POJO
		findByProperty, 		//DEL DAO    
		attachDirty;	   		//DEL DAO
		try {
			
		clase    = Class.forName(obj.getClass().getName());
		claseAux = Class.forName(dao.getClass().getName());


			getValorPorDefecto = clase.getMethod("getValorpordefecto", (Class[]) null);
			setValorpordefecto = clase.getMethod("setValorpordefecto", partipos1);
			findByProperty     = claseAux.getMethod("findByProperty", partipos2);
			attachDirty		   = claseAux.getMethod("attachDirty", partipos3);

			if ("s".equalsIgnoreCase((String) getValorPorDefecto.invoke(obj, (Object[]) null))) {
				List listaPorDefecto = (List) findByProperty.invoke(dao, parametros2);

				if (!listaPorDefecto.isEmpty()){

					/*
					 * 
					 * USAR VENTANA DE MENSAJE PARA CONFIRMAR CAMBIO
					 * AHORA SE ESTA HACIENDO EL CAMBIO SIEMPRE
					 * 
					 * */

					Object objetoAux = listaPorDefecto.get(0);
					setValorpordefecto.invoke(objetoAux, parametros1);		

					/*PARAMETROS DE attachDirty*/
					Object parametros3[] = new Object[1];		
					parametros3[0] = objetoAux;
					attachDirty.invoke(dao, parametros3);
				}
			}
		} catch (RuntimeException e) {
		} catch (Exception e) {		
		}
	}


}
